'''
Created on 14/06/2013

@author: mirta
'''
import unittest
from app import app

from test_helper2 import login
from test_helper2 import elegir_proyecto
from test_helper2 import get_id_when_radio_exist

from app.models.proyecto import Proyecto
from app.models.fase import Fase
from app.models.item import Item

PROYECTO = Proyecto.query.filter_by(nombre='Proyecto pyunit').first()
FASES = Fase.query.filter_by(proyecto_id=PROYECTO.id)
FASES = FASES.all()

for fase in FASES:
   if (fase.nombre=='Fase 2'):
       FASE = fase 
       
ITEMS = Item.query.filter_by(fase_id=FASE.id)
ITEMS = ITEMS.all()

for item in ITEMS:
    if (item.nombre == 'Item pyunit 2'):
        ITEM = item


class TestCase(unittest.TestCase):
    """
    Clase que implementa los test para el caso de uso Solicitud de Cambio.
    Utilizamos esta clase para realizar las pruebas de nuestra aplicacion SAP
    """
    
    def setUp(self):
        """
        se llama a este metodo antes de iniciar el test de la aplicacion
        , este metodo crea un nuevo cliente de prueba.
        Se especifican las acciones a ser tomadas antes de iniciar el test
        """
        
        print "Iniciando test"
        #self.db_fd, app.config['DATABASE'] = tempfile.mkstemp()
        self.app = app.test_client()
        self.acceso = login(self.app)
        self.proyecto = elegir_proyecto(self.app) 


    def tearDown(self):
        """
        se llama a este metodo al terminar el test el test de la aplicacion,
        en el se especifican las acciones a ser tomadas al finalizar el test
        """
        print "Terminando test"


    def test_get_all_solicitud(self):
        """
        Controla que se pueda acceder a la pagina principal de solicitud de cambio
        """
        request = self.app.get('/solicitud/administracion/', follow_redirects=True)
        #assert 'Administrador' in request.data
        self.assertEqual(request._status, '200 OK')
   
   
    def test_crear_solicitud(self):
        """
        Controla que se pueda crear una solicitud de cambio, y luego verifica si la 
        solicitud fue anhadida.
        """
        
        print "Probando crear solicitud de cambio"
        request = self._crear_solicitud(items=ITEM.id, observacion='solicitud test pyunit')
     
        self.assertEqual(request._status, '200 OK')
        print "Solicitud creada correctamente"
                
                
    def _crear_solicitud(self,items=ITEM.id, observacion='solicitud test pyunit'):
        """
        Metodo para crear una solicitud, lo crea y retorna la respuesta
        @param items: id de los items de la nueva solicitud de cambio
        @param observacion: observacion acerca de la nuevo solicitud de cambio
        """
        request = self.app.post('/solicitud/crear/', data=dict(
            items=items,                                                
            observacion=observacion), follow_redirects=True)
        return request

    
    def _get(self, url ='/solicitud/administracion/'):
        """
        Metodo que obtiene la pagina de administracion de solicitud de cambio
        @param url: url de la pagina de administracion de solicitud de cambio
        """
        return self.app.get(url, follow_redirects=True)
    

        
if __name__ == '__main__':
    unittest.main()